该内容已被发布者删除 该内容被自由微信恢复。
文章于 2021年9月5日 被检测为删除。
被用户删除
又到了招聘旺季,鸭哥的读者中,最近应该有不少小伙伴在准备面试吧。
鸭哥也多次参与过面试,如果应聘者既掌握了所问的基础知识,又能说一些知识相关的易踩坑点,在鸭哥这里是很加分的。下面就分享一个面试时令鸭哥印象深刻的回答,这样答完后,平时比较严肃的鸭哥,也不经意间露出了赞赏的笑容~
问题:在 Java 中,我们为什么不用 == 而用 .equals() 比较字符串呢?
Java 中,String 属于引用数据类型。对字符串对象的比较,不能简单地使用比较运算符“==”,因为比较运算符比较的是两个字符串的地址是否相同。即使两个字符串对象的内容相同,只要它们引用的不是同一内容,使用比较运算符依旧会返回false。语言不够直观的话,代码来说话
在上面的代码中,遇到字符串常量时,编译器会使用该值创建一个 String 对象,s1, s2, s3 引用的是同一个字符串常量,所以它们的引用地址及引用对象的值都完全相同。
对于 s4 和 s5,new 时分别创建了两个字符串对象,虽然字符串的内容相同,但是它们的引用地址是不同的。 所以就有了下面的运行结果:
当我们想要在忽略大小写的情况下比较两个字符串是否相等时,可以用.equalsIgnoreCase()方法。
这些非必答的内容,答出来是有一定的加分效果的,因为这些内容一定程度上反映了实战经验。但所占篇幅不宜过长,应该把握住面试官提问的主要内容,不然效果可能适得其反。
每天一个入职小技巧,你有哪些面试技巧想要分享呢?欢迎在留言区讨论哦。
热门推荐:扫描关注,永不迷路 点分享 点点赞 点在看
:
,
.
Video
Mini Program
Like
,轻点两下取消赞
Wow
,轻点两下取消在看
其他
为什么不用 == 而用 .equals() 比较字符串?听完后,面试官对我的回答表示赞赏
大家好,我是你们的鸭哥
记得点击关注下方公众号,领取 编程资料
不管有没有工作经验,基础是否扎实都是面试重点考察的点。正所谓基础不牢,地动山摇,基础知识不仅能反映语言功底,很多知识用法的易踩坑点更是经验教训的总结。
public class compareString {
public static void main(String[] args) {
String s1 = "test";
String s2 = "test";
String s3 = s1; // 相同引用
String s4 = new String("test");
String s5 = new String("test");
if(s1 == s2 && s2 == s3){
System.out.println("s1,s2和s3使用比较运算符返回true,因为它们引用的是同一公共池中的同一对象");
}
if(!(s4 == s5)){
System.out.println("s4和s5使用比较运算符返回false,因为它们引用的是不同的对象");
}
if(s4 != null && s4.equals(s5)){
System.out.println("s4与s5引用的不同字符串对象的值相同");
}
}
}
String Pool
s1 -----------------> "test" <-----------------s2
||
s3
Heap
"test" <-------------------- s4
"test" <-------------------- s5
能答出上面这些内容,就反映出应聘者的基础是很扎实的。除此之外,实战方面,.equals() 还有一些注意事项如下。
当字符串对象为 null 时,调用 .equals() 方法会抛空指针异常。
String testStr1 = null;
String testStr2 = new String("test");
boolean result = testStr1.equals(testStr2); //因为testStr1为null,所以这里将抛出NullPointerException
//正确的写法是,先检查testStr1不为空,再调用.equals() 方法
if(testStr1 != null)
boolean result = testStr1.equals(testStr2);
String testStr3 = new String("abc");
String testStr4 = new String("ABC");
if(testStr3 != null)
System.out.println(testStr3.equalsIgnoreCase(testStr4)); //此时输出比较结果:"true"